package com.ruoyi.system.service.complex;

import com.ruoyi.system.bean.rsp.PriceSalesRsp;
import com.ruoyi.system.domain.PriceCost;
import com.ruoyi.system.domain.PriceSales;
import com.ruoyi.system.service.IPriceCostService;
import com.ruoyi.system.service.IPriceSalesService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;

@Slf4j
@Service
public class PriceComplex {

    @Resource
    private IPriceSalesService priceSalesService;
    @Resource
    private IPriceCostService priceCostService;

    /**
     * 根据成本和售价表计算售价
     *
     * @param date 当前日期
     * @param cityId 出发城市ID
     * @return 返回计算后的售价信息
     */
    public PriceSalesRsp calculateSalesPrice(Date date, Long cityId) {
        // 根据日期和城市ID查找成本表中的数据
        PriceCost cost = this.findCostByDateAndCityId(date, cityId);

        // 检查成本数据是否存在且有效
        if (cost.getStatus() != 1) {
            throw new IllegalArgumentException("成本数据不存在或无效");
        }

        // 根据日期和城市ID查找售价表中的数据
        PriceSales sales = this.findSalesByDateAndCityId(date, cityId);

        // 检查售价数据是否存在，若不存在则设置默认值
        if (sales == null) {
            sales = new PriceSales();
            sales.setPriceHourlyRate(10.0);
            sales.setPriceDailyRate(10.0);
        } else if (sales.getStatus() != 1) {
            throw new IllegalArgumentException("售价数据不存在或无效");
        }

        // 计算小时售价
        Integer hourlySalesPrice = (int) (cost.getPriceHourly() / (1 - sales.getPriceHourlyRate() / 100.0) * 100);
        // 计算天售价
        Integer dailySalesPrice = (int) (cost.getPriceDaily() / (1 - sales.getPriceDailyRate() / 100.0) * 100);

        PriceSalesRsp salesRsp = new PriceSalesRsp();
        // 设置计算后的售价信息
        salesRsp.setPriceHourly(hourlySalesPrice);
        salesRsp.setPriceDaily(dailySalesPrice);
        salesRsp.setPriceCityId(cityId);
        salesRsp.setPriceCityName(cost.getPriceCityName());

        return salesRsp;
    }


    /**
     * 根据日期和城市ID查找成本表中的数据
     *
     * @param date 日期
     * @param cityId 城市ID
     * @return 成本数据
     */
    private PriceCost findCostByDateAndCityId(Date date, Long cityId) {
        return this.priceCostService.findCostByDateAndCityId(date, cityId);
    }

    /**
     * 根据日期和城市ID查找售价表中的数据
     *
     * @param date 日期
     * @param cityId 城市ID
     * @return 售价数据
     */
    private PriceSales findSalesByDateAndCityId(Date date, Long cityId) {
        return this.priceSalesService.findSalesByDateAndCityId(date, cityId);
    }


}
